import xlrd
import xlwt
import os

class ExcelUtils(object):

    def __init__(self,path):
        self.__path = path
        self.__workbook = xlrd.open_workbook(path)

    def setPath(self,path):
        self.__path = path
        self.__workbook = xlrd.open_workbook(path)

    def getPath(self):
        return self.__path

    def createExcel(self):
        # 创建一个工作簿
        xl = xlwt.Workbook(encoding='utf-8')
        # 创建一个sheet对象,第二个参数是指单元格是否允许重设置，默认为False
        sheet = xl.add_sheet('菜鸟的成长历程', cell_overwrite_ok=False)
        # 初始化样式
        style = xlwt.XFStyle()
        # 为样式创建字体
        font = xlwt.Font()
        font.name = 'Times New Roman'
        # 黑体
        font.bold = True
        # 下划线
        font.underline = False
        # 斜体字
        font.italic = True
        # 设定样式
        style.font = font
        # 第一个参数代表行，第二个参数是列，第三个参数是内容，第四个参数是格式
        sheet.write(0, 0, '不带样式的携入')
        sheet.write(1, 0, '带样式的写入', style)

        # 保存文件
        xl.save(self.Path)

        print('创建成功')


    '''
        检查文件是否存在
    '''
    def isFileExists(self):
        return os.path.exists(self.Path)

    '''
        删除文件
    '''
    def delFile(self):
        if self.isFileExists():
            if os.path.isfile(self.Path):
                os.remove(self.Path)
                if self.isFileExists():
                    pass
                else:
                    print('删除成功')
            else:
                print('不是文件，不能删除')
            pass
        else:
            print('文件不存在，无法删除')

    def getWorkBook(self):
        return self.__workbook

    '''
        属性设置
    '''
    Path = property(fget=getPath,fset=setPath)
    WorkBook = property(fget=getWorkBook)


def save_excel(target_list, output_file_name):
    """
    将数据写入xls文件
    """
    if not output_file_name.endswith('.xls'):
        output_file_name += '.xls'

    # 创建一个workbook
    workbook = xlwt.Workbook(encoding='utf-8')
    ws = workbook.add_sheet("sheet1")
    title_data = ('a', 'b', 'c', 'd', 'e', 'f')

    # 列表插入一条记录
    target_list.insert(0, title_data)

    # 获取列表的元素个数
    rows = len(target_list)

    # 获取列表中元组的元素个数
    lines = len(target_list[0])
    for i in range(rows):
        for j in range(lines):
            # 直接根据行列进行插入数据
            ws.write(i, j, target_list[i][j])
    workbook.save(output_file_name)

def read_excel(input_file_name):
    """
    从xls文件中读取数据
    """
    workbook = xlrd.open_workbook(input_file_name)
    print(workbook)
    # 可以使用workbook对象的sheet_names()方法获取到excel文件中哪些表有数据
    print(workbook.sheet_names())
    # 可以通过sheet_by_index()方法或sheet_by_name()方法获取到一张表，返回一个对象
    # table = workbook.sheet_by_index(0)
    # print(table)
    table = workbook.sheet_by_name('sheet1')
    print(table)

    # 通过nrows和ncols获取到表格中数据的行数和列数
    rows = table.nrows
    cols = table.ncols

    # 可以通过row.values()按行获取数据，返回一个列表，也可以按列
    for row in range(rows):
        row_data = table.row_values(row)
        print(''.join(row_data),'\n')

    # 也可以根据单元格获取每一个单元格的数据
    for row in range(rows):
        for col in range(cols):
            data = table.cell(row, col).value
            print(data, end=' ')



def excelMegerFunc():

    # 第一步：创建工作簿
    wb = xlwt.Workbook()

    # 第二步：创建工作表
    ws = wb.add_sheet("CNY")

    # 第三步：填充数据
    ws.write_merge(0, 1, 0, 5, "2019年货币兑换表")

    # 写入货币数据
    data = (("Date", "英镑", "人民币", "港币", "日元", "美元"),
            ("01/01/2019", 8.722551, 1, 0.877885, 0.062722, 6.8759),
            ("02/01/2019", 8.634922, 1, 0.875731, 0.062773, 6.8601))
    for i, item in enumerate(data):
        for j, val in enumerate(item):
            ws.write(i + 2, j, val)

    # 创建第二个工作表
    wsImage = wb.add_sheet("image")

    # 写入图片
    # wsImage.insert_bitmap("OIP-C.jpg", 0, 0)

    # 第四步：保存
    wb.save("2019-CNY.xls")

if __name__ == '__main__':

    # 要插入到excel的数据
    # 外层用列表，里面的列用元组
    # xlwt_data = [
    #     ('有', '人', '云', '淡', '风', '轻'),
    #     ('有', '人', '负', '重', '前', '行'),
    #     ('p', 'y', 't', 'h', 'o', 'n')
    # ]

    # output_file_name = 'xlwt_file.xls'

    # save_excel(xlwt_data, output_file_name)

    # read_excel(output_file_name)

    excelMegerFunc()
    pass